#Boa:Dialog:Compras

import wx
import wx.lib.masked.textctrl
import wx.calendar
import wx.grid
import consultasBD
import Altaproductos
import Buscacolor2
import BuscaProdPorDescri
import consultasBD
import utiles
import sincronizar_tabla
import BuscaProveedor  
import Mensaje
import Pagos
from decimal import Decimal
import ChequesAlta
import os

def create(parent):
    return Compras(parent)

[wxID_COMPRAS, wxID_COMPRASBUTTON1, wxID_COMPRASBUTTON2, wxID_COMPRASGRID1, 
 wxID_COMPRASINCANTIDADES, wxID_COMPRASINFECHAFACTURA, 
 wxID_COMPRASINFECHAINGRESO, wxID_COMPRASINIVA, wxID_COMPRASINNOMBREPROVEE, 
 wxID_COMPRASINPAGANDO, wxID_COMPRASINPROVEEDOR, wxID_COMPRASINSUBTOTAL, 
 wxID_COMPRASINTOTAL, wxID_COMPRASNRO_FACTURA, wxID_COMPRASSTATICBOX1, 
 wxID_COMPRASSTATICLINE1, wxID_COMPRASSTATICLINE2, wxID_COMPRASSTATICLINE3, 
 wxID_COMPRASSTATICLINE4, wxID_COMPRASSTATICTEXT1, wxID_COMPRASSTATICTEXT10, 
 wxID_COMPRASSTATICTEXT11, wxID_COMPRASSTATICTEXT2, wxID_COMPRASSTATICTEXT3, 
 wxID_COMPRASSTATICTEXT5, wxID_COMPRASSTATICTEXT6, wxID_COMPRASSTATICTEXT7, 
 wxID_COMPRASSTATICTEXT8, wxID_COMPRASSTATICTEXT9, 
 wxID_COMPRASTEXTNOMBREPROVEE, 
] = [wx.NewId() for _init_ctrls in range(30)]

class Compras(wx.Dialog):
    modificables = (0,3,4,5,6)
    
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_COMPRAS, name='', parent=prnt,
              pos=wx.Point(203, 82), size=wx.Size(726, 491),
              style=wx.DEFAULT_DIALOG_STYLE, title='Ingreso de Devoluciones')
        self.SetClientSize(wx.Size(710, 455))

        self.staticText1 = wx.StaticText(id=wxID_COMPRASSTATICTEXT1,
              label='Fecha de Ingreso:', name='staticText1', parent=self,
              pos=wx.Point(14, 31), size=wx.Size(89, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_COMPRASSTATICTEXT2,
              label='Fecha Factura:', name='staticText2', parent=self,
              pos=wx.Point(14, 61), size=wx.Size(74, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_COMPRASSTATICTEXT3,
              label='Nombre', name='staticText3', parent=self, pos=wx.Point(298,
              52), size=wx.Size(37, 13), style=0)

        self.button1 = wx.Button(id=wxID_COMPRASBUTTON1, label='Buscar',
              name='button1', parent=self, pos=wx.Point(528, 68),
              size=wx.Size(64, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscarProveedorButton,
              id=wxID_COMPRASBUTTON1)

        self.staticLine1 = wx.StaticLine(id=wxID_COMPRASSTATICLINE1,
              name='staticLine1', parent=self, pos=wx.Point(1, 100),
              size=wx.Size(711, 4), style=0)

        self.staticLine2 = wx.StaticLine(id=wxID_COMPRASSTATICLINE2,
              name='staticLine2', parent=self, pos=wx.Point(368, 112),
              size=wx.Size(1, 2), style=0)

        self.staticLine3 = wx.StaticLine(id=wxID_COMPRASSTATICLINE3,
              name='staticLine3', parent=self, pos=wx.Point(368, 112),
              size=wx.Size(1, 2), style=0)

        self.staticLine4 = wx.StaticLine(id=wxID_COMPRASSTATICLINE4,
              name='staticLine4', parent=self, pos=wx.Point(256, 6),
              size=wx.Size(0, 104), style=0)

        self.grid1 = wx.grid.Grid(id=wxID_COMPRASGRID1, name='grid1',
              parent=self, pos=wx.Point(0, 107), size=wx.Size(680, 176),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
              self.OnGrid1GridCellChange)

        self.staticText5 = wx.StaticText(id=wxID_COMPRASSTATICTEXT5,
              label='Cant. Art. Ingresados:', name='staticText5', parent=self,
              pos=wx.Point(326, 298), size=wx.Size(111, 13), style=0)

        self.incantidades = wx.TextCtrl(id=wxID_COMPRASINCANTIDADES,
              name='incantidades', parent=self, pos=wx.Point(438, 296),
              size=wx.Size(48, 21), style=0, value='')
        self.incantidades.Enable(True)
        self.incantidades.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_COMPRASSTATICTEXT6,
              label='Sub-Total Iva Discri.:', name='staticText6', parent=self,
              pos=wx.Point(510, 296), size=wx.Size(102, 13), style=0)

        self.insubtotal = wx.TextCtrl(id=wxID_COMPRASINSUBTOTAL,
              name='insubtotal', parent=self, pos=wx.Point(614, 292),
              size=wx.Size(64, 21), style=0, value='')
        self.insubtotal.Enable(True)
        self.insubtotal.SetEditable(False)

        self.staticText7 = wx.StaticText(id=wxID_COMPRASSTATICTEXT7,
              label='Total:', name='staticText7', parent=self, pos=wx.Point(582,
              353), size=wx.Size(29, 13), style=0)

        self.intotal = wx.TextCtrl(id=wxID_COMPRASINTOTAL, name='intotal',
              parent=self, pos=wx.Point(614, 347), size=wx.Size(64, 21),
              style=0, value='')
        self.intotal.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        self.intotal.SetEditable(False)

        self.button2 = wx.Button(id=wxID_COMPRASBUTTON2, label=u'Guardar',
              name='button2', parent=self, pos=wx.Point(560, 417),
              size=wx.Size(120, 32), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnButton2Button,
              id=wxID_COMPRASBUTTON2)

        self.staticText8 = wx.StaticText(id=wxID_COMPRASSTATICTEXT8,
              label='Iva:', name='staticText8', parent=self, pos=wx.Point(591,
              324), size=wx.Size(21, 13), style=0)

        self.iniva = wx.TextCtrl(id=wxID_COMPRASINIVA, name='iniva',
              parent=self, pos=wx.Point(614, 318), size=wx.Size(64, 21),
              style=0, value='')
        self.iniva.SetEditable(False)

        self.inNombreProvee = wx.TextCtrl(id=wxID_COMPRASINNOMBREPROVEE,
              name='inNombreProvee', parent=self, pos=wx.Point(368, 49),
              size=wx.Size(144, 21), style=0, value='')
        self.inNombreProvee.SetEditable(False)

        self.infechaingreso = wx.DatePickerCtrl(id=wxID_COMPRASINFECHAINGRESO,
              name='infechaingreso', parent=self, pos=wx.Point(131, 29),
              size=wx.Size(96, 21), style=wx.DP_SHOWCENTURY)
        self.infechaingreso.Enable(False)

        self.infechafactura = wx.DatePickerCtrl(id=wxID_COMPRASINFECHAFACTURA,
              name='infechafactura', parent=self, pos=wx.Point(131, 61),
              size=wx.Size(96, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.staticText10 = wx.StaticText(id=wxID_COMPRASSTATICTEXT10,
              label='ID', name='staticText10', parent=self, pos=wx.Point(297,
              30), size=wx.Size(11, 13), style=0)

        self.nro_factura = wx.TextCtrl(id=wxID_COMPRASNRO_FACTURA,
              name=u'nro_factura', parent=self, pos=wx.Point(368, 72),
              size=wx.Size(144, 21), style=0, value=u'')

        self.inproveedor = wx.TextCtrl(id=wxID_COMPRASINPROVEEDOR,
              name='inproveedor', parent=self, pos=wx.Point(368, 25),
              size=wx.Size(144, 21), style=0, value='')
        self.inproveedor.Bind(wx.EVT_KILL_FOCUS, self.OnInproveedorKillFocus)
        self.inproveedor.Bind(wx.EVT_SET_FOCUS, self.OnInproveedorSetFocus)

        self.staticText9 = wx.StaticText(id=wxID_COMPRASSTATICTEXT9,
              label='Va Pagando:', name='staticText9', parent=self,
              pos=wx.Point(475, 392), size=wx.Size(62, 13), style=0)

        self.inpagando = wx.lib.masked.textctrl.TextCtrl(id=wxID_COMPRASINPAGANDO,
              name='inpagando', parent=self, pos=wx.Point(474, 410),
              size=wx.Size(56, 21), style=0, value='             ')
        self.inpagando.SetAutoformat('')
        self.inpagando.SetMask('XXXXXXXXXXXXX')
        self.inpagando.SetDatestyle('MDY')
        self.inpagando.SetFormatcodes('')
        self.inpagando.SetDescription('')
        self.inpagando.SetExcludeChars('')
        self.inpagando.SetValidRegex('')
        self.inpagando.SetEditable(False)

        self.staticText11 = wx.StaticText(id=wxID_COMPRASSTATICTEXT11,
              label='Nro Factura', name='staticText11', parent=self,
              pos=wx.Point(296, 76), size=wx.Size(57, 13), style=0)

        self.staticBox1 = wx.StaticBox(id=wxID_COMPRASSTATICBOX1,
              label='Proveedor', name='staticBox1', parent=self,
              pos=wx.Point(280, 8), size=wx.Size(336, 88), style=0)

        self.textNombreProvee = wx.StaticText(id=wxID_COMPRASTEXTNOMBREPROVEE,
              label='', name='textNombreProvee', parent=self, pos=wx.Point(520,
              48), size=wx.Size(0, 13), style=0)

    def __init__(self, parent):        
        self.padre = parent
        self.sucursal = self.padre.sucursalNro
        
        self._init_ctrls(parent)
        self.grillafactura()
        
        #forma de pagos
        #self.init_grillaFacturaPagos()
        
        self.acumulaimportes = 0.0
        # self.valores lleva los importes que se van ingresando
        self.valores = {}
        self.valores['resto'] = 0.0
        # self.pagos lleva un referencia renglon --> cod. del valor de pago 
        self.pagos = {}        
        
        
    def grillafactura(self):
        '''Inicializa la Grilla'''
        #configuro la grilla de facturacion
        self.grid1.CreateGrid(60,9)
              
        columnas =['         PTC           ','Cod. Sussan','Descripcion     ','Cantidad','Talle  ','Color','P. Costo  ','Iva   ','Total $',]
        
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
            self.grid1.AutoSizeColumn(i,True)
            
        self.grid1.AutoSizeRow(0,True)
        
        #self.grid1.SetRowLabelValue(10,"TOTALES")
        self.grid1.DisableDragColSize()
        self.total = "" 
        
        #para hacer que solo sean legibles algunas columnas
        for x in xrange(11):
            for i in xrange(10):
                if i not in self.modificables:
                    self.grid1.SetReadOnly(x,i,True)
        #fin configuracion grilla facturacion
        

    
    def init_grillaFacturaPagos(self):
        #Conf. GRilla nro. 2 de forma de pago
        pass
##        cantidadRenglones = 4
##        self.grid2.CreateGrid(cantidadRenglones,5)      
##        columnas =['Forma','Descripcion','Cuotas','Valor Cuota','Total']
##        for i in range(len(columnas)-1,-1,-1): 
##            self.grid2.SetColLabelValue(i, columnas[i])
##        self.grid2.AutoSizeColumn(0,True)
##        self.grid2.AutoSizeColumn(1,True)
##        self.grid2.AutoSizeColumn(2,True)
##        self.grid2.AutoSizeColumn(3,True)
##        self.grid2.SetColSize(1,100)
##        self.grid2.DisableDragColSize()
##        self.grid2.DisableDragRowSize()
##        for x in xrange(cantidadRenglones):
##            for i in xrange(5):
##                if i not in (0,4):
##                    self.grid2.SetReadOnly(x,i,True)
        
    
    
    def _buscar(self, ptc):
        '''Dada un codigo de producto intenta encontrarlo en la bd y devolverlo'''
        proveedor = self.inproveedor.Value
        
        
        sql= "SELECT ptc.id,ptc.talle,ptc.color,p.* FROM productos p, producto_talle_color ptc WHERE p.codsussan = ptc.codsussan AND ptc.id = '%s'" % ptc
        resultados = consultasBD.ordenCrudaDict(sql)
        return resultados
            
    def _buscar_interactivo(self):
        '''Abre el dialogo de busqueda de productos'''
        proveedor = self.inproveedor.Value
        dlg = BuscaProdPorDescri.BuscarDescrip(self, proveedor)
        try:
            dlg.ShowModal()
            codsussan = dlg.Muestraid()
        
        finally:
            dlg.Destroy()        
        
        return codsussan
    
    def _asociar_codsussan_codbarra(self, codartprov, codsussan):
        '''Agrega una fila en la BD asociando el codsussan con un codigo de barra del proveedor'''
        sql = "INSERT INTO producto_codartprov (codartprov, codsussan) VALUES ('%s', '%s')" % (codartprov, codsussan)
        print sql
        consultasBD.executa(None, sql)
        
    
       
            
    def _mostrar_articulo_en_grilla(self, fila, articulo):
        '''Muestra un articulo en la fila dada'''
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 0, articulo['id']) #cod. sussan
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 1, articulo['codsussan']) #cod. sussan
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 2, articulo['descri']) #descri
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 3, "1") #cant.
        self.grid1.SetCellValue(    self.grid1.GetGridCursorRow(), 4, str(articulo['talle'])) #talle
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 5, str(articulo['color'])) #color
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 6, str(articulo['preciocompra'])) #p compra
        #self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 7, str(sacariva(r[8]))) #con iva
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 8, str(articulo['preciocompra'])) #final

    def OnGrid1GridCellChange(self, event):
        '''Manejador de los cambios en la grilla'''
        #self.grid1.SetGridCursor(7, 0)
        
        fila    = self.grid1.GetGridCursorRow()
        columna = self.grid1.GetGridCursorCol()
                
        if self.inproveedor.Value == "":
                self.grid1.SetCellValue(fila, columna, "")
                mensaje = wx.MessageDialog(self, "Ingrese un Proveedor", "Proveedor", style=wx.OK,pos = wx.DefaultPosition)
                mensaje.ShowModal()
                return
        
        celda = self.grid1.GetCellValue(fila, columna)
        #CELDA VACIA
        if celda == "" :
            self.grid1.SetCellValue(fila, columna,"")
            for x in xrange(9):
                self.grid1.SetCellValue(fila,x,"")
            
            self.grid1.ForceRefresh()
            self.actualizaSubtotal()
        
        
        #INGRESO ALGO.
        else:
            # BUSCAR
                ptc = self.grid1.GetCellValue(fila,0)                  
                resultados = self._buscar(ptc)                   
                         
                if len(resultados)==0 : 
                    mensaje = wx.MessageDialog(self, "No se encontro ese producto", "Proveedor", style=wx.OK,pos = wx.DefaultPosition)
                    mensaje.ShowModal()
                    return
                else:
                    print "lo encontro"
                    articulo = resultados[0]
                    if articulo["proveedor"]!=self.inproveedor.Value:
                        mensaje = wx.MessageDialog(self, "ESE PTC no es del proveedor ingresado", "Proveedor", style=wx.OK,pos = wx.DefaultPosition)
                        mensaje.ShowModal()
                     
                      
                    else:    
                        self._mostrar_articulo_en_grilla(fila, articulo) 
                    
                    #actualizo subtotal        
                    self.actualizaSubtotal()
                    self.grid1.ForceRefresh()
                
                          
                    
                    
    
           
    def _validar_cantidad(self, fila):
        '''Verifica que la cantidad en una fila sea adecuada'''
        error = False
        msg   = ""
         
        cantidad = self.grid1.GetCellValue(fila, 3)
        try:
            if int(cantidad) == 0:
                error = True
                msg = "La cantidad no puede ser CERO"
                self.grid1.SetCellValue(fila, 3, "1")
        except:
            error = True
            msg   = "La cantidad debe ser un numero entero"             
            self.grid1.SetCellValue(fila, 3, "1")

        if error:
            mensaje = wx.MessageDialog(self, msg, "Error", style=wx.OK,pos = wx.DefaultPosition)
            mensaje.ShowModal()
            return False
        
        return True     

            
    def actualizaSubtotal(self):        
        #No hay descuento
        cantidades = 0
        tomocelda = 0.0
        # validar solo cuando se ingresa un nro y no una letra
        for x in xrange(60):
            if (self.grid1.GetCellValue(int(x),0) != ""):
                
                cantidad = int(self.grid1.GetCellValue(int(x),3))
                cantidades += cantidad
                
                precio = self.grid1.GetCellValue(x, 6)
                total = float(cantidad) * float(precio)
                iva   = total * .21
                          
                self.grid1.SetCellValue(x, 7, str(iva))
                self.grid1.SetCellValue(x, 8, str(total))

                self.grid1.ForceRefresh() # va un refresh asi el proximo metodo ya toma los cambios
            else:
                pass
        
        self.incantidades.ChangeValue(str(cantidades))  
        self.subtotalfactura()


    def subtotalfactura(self):
        '''Calcula y muestra en pantalla el subtotal de la factura'''
        subtotal = 0.0
        tomocelda = 0.0
        for x in xrange(10):
            tomocelda = self.grid1.GetCellValue(int(x),8)
            if tomocelda == "" :
                subtotal = subtotal + 0.0
            else:
                subtotal = subtotal + float(tomocelda)
        
        iva = (21 * (subtotal) / 100)
        discrimina = subtotal - iva
        self.iniva.ChangeValue(str(round(iva,2)))
        self.insubtotal.ChangeValue(str(round(discrimina,2)))
        self.intotal.ChangeValue(str(round(subtotal,2)))
        self.grid1.ForceRefresh()

    def OnInproveedorKillFocus(self, event):
        char = self.inproveedor.Value
        sql = "SELECT * FROM proveedor WHERE idproveedor = '%s'" % str(char)
        resultado = consultasBD.ordenCrudaResultDict(sql)
        if resultado == []:
            self.inproveedor.Value = ""
            self.inNombreProvee.Value = ""
            utiles.mensaje(self, "No se encontro el proveedor")
            return
    
        self.inNombreProvee.Value = resultado['nombre']

    def _cantidad_de_prendas(self):
        '''Retorna la cantidad de prendas en la grilla'''
        return self.incantidades.Value
            
    def _crear_devolucion(self):
        '''Crea una devolucion de compra en la BD'''
        iddevolucion =  utiles.secuencia("compras_devolucion", self.sucursal)
        nroDevolucion = iddevolucion
        idproveedor   = self.inproveedor.Value
        fechafactura  = utiles.formatear_fecha_date(self.infechafactura.Value)

        cantprendas   = self._cantidad_de_prendas()
        #en1oen2       = int(self.tipo_compra.GetSelection()) + 1
        en1oen2       = 1
        total         = self.intotal.Value
        
        sql = "INSERT INTO comprasdevoluciones (idDevolucion,idProveedor,fecha,cantProductos,montoDevolucion,causaDevolucion,auditoria) VALUES ('%s', '%s', SYSDATE(), '%s', '%s', '%s', '%s')" % (iddevolucion, idproveedor, cantprendas, total, '' , '')
        consultasBD.executaSinCommit(None, sql)
        return iddevolucion

    def _agregar_items_devolucion(self, iddevolucion):
        '''DECREMENTA el stock de los productos adquiridos'''
        for x in xrange(60):
            if (self.grid1.GetCellValue(int(x),0) == ""):
                continue
            
            ptc = self.grid1.GetCellValue(int(x),0)
            codsussan    = self.grid1.GetCellValue(int(x),1)
            cantidad = int(self.grid1.GetCellValue(int(x),3))
            talle    = self.grid1.GetCellValue(int(x),4).upper()
            color    = self.grid1.GetCellValue(int(x),5)
            sucursal = self.sucursal
            monto = self.grid1.GetCellValue(int(x),8)
            #Si no existe el PTC se crea  
                        
            stock = utiles.stock_sumado(ptc, sucursal, -cantidad)
            
            utiles.agregar_movimiento(ptc, stock_previo=stock - cantidad, stock_nuevo=stock, operacion='compra_devolucion', idcompra = iddevolucion, sucursal=self.sucursal)
            
            sql = "UPDATE stock SET stock = '%s' WHERE ptc = '%s' AND sucursal = '%s'" % (stock, ptc, sucursal)                
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)
            
            sql2 = "INSERT INTO comprasdevoluciones_items (idDevolucion,  idProveedor,fecha,ptc,codsussan,talle,color,cantidad,monto,otro) VALUES ('%s', '%s', SYSDATE(), '%s', '%s', '%s', '%s', '%s', '%s','%s')" %  (iddevolucion, self.inproveedor.Value,ptc,codsussan,talle,color,cantidad,monto,'')
            print sql2
            consultasBD.executaSinCommit(None, sql2)
            
                    

    def _validar_guardar(self):
        '''Validaciones varias antes de guardar una factura'''
        error = False
        msg = ""
        if self.inNombreProvee.Value == "":
                error = True
                msg += "Ingrese un Proveedor\n"
            
        if self.nro_factura.Value == "":    
                error = True
                msg += "Ingrese el Numero de Factura\n"
                
        if self.incantidades.Value in ("", "0"):
                error = True
                msg += "Debe ingresar por lo menos un Articulo"
                 
                
        if error:
                mensaje = wx.MessageDialog(self, msg, "Error", style=wx.OK,pos = wx.DefaultPosition)
                mensaje.ShowModal()
                return  False
            
        return True 
    
    
    def _validar_imprimir(self):
        '''Validaciones varias antes de imprimir las etiquetas'''
        error = False
        msg = ""
        if self.incantidades.Value in ("", "0"):
                error = True
                msg += "Debe ingresar por lo menos un Articulo"
                
        if not self._color_talle_completo():
                error = True
                msg += "Debe completar un Talle y un Color"
                                
        if error:
                mensaje = wx.MessageDialog(self, msg, "Error", style=wx.OK,pos = wx.DefaultPosition)
                mensaje.ShowModal()
                return  False                
        return True



    def OnButton2Button(self, event):          
        if not self._validar_guardar():
            return
        try:
            self.button2.SetLabel('PROCESANDO')
            self.button2.Enable(False)
            
            consultasBD.begin()
            iddevolucion = self._crear_devolucion()
            self._agregar_items_devolucion(iddevolucion)
            self.Imprimir()
            print "paso imprimir"
            
            
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["productos", "producto_talle_color", "stock"])
            raise sincronizar_tabla.SyncError
            utiles.mensaje(self, "La compra se guardo y sincronizo correctamente")            
            
            self.Close()
 
        except sincronizar_tabla.SyncError:
            utiles.mensaje(self, "La compra se guardo \n pero no termino de transmitirse por favor realize un sincronizacion")
            self.Close()
        except Exception, e:
            import traceback
            import sys
            exc_type, exc_value, exc_tb = sys.exc_info()
            traceback.print_exception(exc_type, exc_value, exc_tb)
            print e.__str__()
            utiles.mensaje(self, "NO se pudo guardar la compra")    
            consultasBD.rollback()

            self.button2.SetLabel('GUARDAR')
            self.button2.Enable(True)

    


		
    def Imprimir(self):
        html_file = open("compras_devolucion.html", 'r')
        self.html = html_file.read()
        html_file.close()

        parametro_impresion = ""
        
        self.html = self.html.replace("%FECHA%",self.padre.fecha)
        self.html = self.html.replace("%PROVEEDOR%",str(self.inNombreProvee.GetValue()))
        
        total= float(0.00)
        cont= 0 
        fila=""
        for x in xrange(60):
            if (self.grid1.GetCellValue(int(x),0) != ""):
                
                ptc = self.grid1.GetCellValue(int(x),0)
                codsussan    = self.grid1.GetCellValue(int(x),1)
                descri    = str(self.grid1.GetCellValue(int(x),2))
                cantidad = int(self.grid1.GetCellValue(int(x),3))
                talle    = self.grid1.GetCellValue(int(x),4).upper()
                color    = self.grid1.GetCellValue(int(x),5)
                costounidad    = float(self.grid1.GetCellValue(int(x),8))
                
                
                total = total + float(costounidad)
                cont=cont+int(cantidad)
                #join con precios
                SQL = "SELECT * FROM producto_codartprov WHERE codsussan = '%s'" % (codsussan)
                print SQL
                resultados = consultasBD.ordenCrudaResultDict(SQL)
                if resultados == [] : codProveedor ="indefinido"
                else: codProveedor = resultados['codartprov']
                
                
                fila = "<tr> <td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'> %s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'> %s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>%s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>%s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>%s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>%s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>%s</font></div></td><td><div align='right'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>$ %s </font></div></td></tr>" % (codProveedor,ptc,codsussan,descri,talle,color,cantidad,costounidad)
                parametro_impresion = parametro_impresion + fila
        
        
        print parametro_impresion
        self.html = self.html.replace("%PRODUCTOS%",str(parametro_impresion))
        self.html = self.html.replace("%CANTIDAD%",str(cont))
        self.html = self.html.replace("%TOTAL%",str(total))
        
        
        archivo_salida = open('compras_devolucion2.html', 'w')
        archivo_salida.write(self.html)
        archivo_salida.close()

        os.system("c:\explorer.lnk file:///C:/ERP%20sussan/compras_devolucion2.html")
        
        
    def OnBuscarProveedorButton(self, event):
        if not utiles.isGrillaEmpy(self.grid1, 60):
            utiles.mensaje(self, "No puede cambiar el proveedor si ya introdujo algun item")
            return
        
        ventana = BuscaProveedor.BuscaProveedor(self)
        try:
            ventana.ShowModal()
            id_proveedor, nombre = ventana.Muestraid()
            self.inproveedor.Value = id_proveedor
            self.inNombreProvee.Value = nombre                        
        finally:
            ventana.Destroy()
        
        event.Skip()

  

    def OnInproveedorSetFocus(self, event):
        print "ME QUEDEEEEEEEEEEEEEEEEEEEEEE"
        if not utiles.isGrillaEmpy(self.grid1, 60):
            self.grid1.SetFocus()
            utiles.mensaje(self, "No puede cambiar el proveedor si ya introdujo algun item")
            
            return        
        event.Skip()

